package n2_common_methods;

import lombok.extern.slf4j.Slf4j;

import static utils.Sleeper.sleep;
/**
 * interrupt:
 *      线程打断，一般是 A线程里 对 B线程 进行打断; [然后B线程 内部判断是否被打断进一步处理(料理后事)]
 *
 *
 * interrupt 打断 sleep，wait，join 的线程
 * ----------打断 sleep，wait，join 的线程 作为异常打断 isInterrupted() = false 【被打断的线程 停止执行】
 * ----------打断 正常执行的程序           作为正常打断 isInterrupted() = true  【被打断的线程 继续正常执行(可根据Thread.currentThread().isInterrupted() 做处理)】
 *
 */
@Slf4j(topic = "c.T6")
public class T6_interrupt {

    static int i = 1;
    public static void main(String[] args) {
        Thread t1 = new Thread(()->{
            log.debug("sleep beg...");
//>>>>>>>>>>>>>>>>>>>>>>>
            sleep(5);
            log.debug("sleep end...");
//--------------------
//            while(true){
//                i++;
//            }
//<<<<<<<<<<<<<<<<<<<<<<<


            log.debug("sleep 被打断会报InterruptedException，说明被打断还继续执行 ...");

        },"t1");

        t1.start();

        sleep(1);
        log.debug("interrupt... {}",i);
        t1.interrupt();
        log.debug("打断标记：{}", t1.isInterrupted());

    }


    static class T6_interrupt2{
        public static void main(String[] args) {

            Thread t1 = new Thread(()->{
                while(true){
                    final boolean interrupted = Thread.currentThread().isInterrupted();
                    // 如果 被打断了 进行处理
                    if (interrupted) {

                        log.debug("--------被打断了-----------interrupt = "+ interrupted);
                        break;
                    }
                }
            }, "t1");
            log.debug("mmmmmmmmmmmmmmmmmmmmmmmmm 打断标记：{}", t1.isInterrupted());

            t1.start();
            log.debug("interrupt...");
            t1.interrupt();

            log.debug("mmmmmmmmmmmmmmmmmmmmmmmmm 打断标记：{}", t1.isInterrupted());

        }
    }

}
